package com.itany.corejava.code07_常用类.枚举;



/**
 * @author MissChen
 * @date 2024年03月02日 13:37
 */
public enum Season {
    //由于枚举类主要用于限制某个属性的值，只能是该类中存在的某些值
    // 因此，枚举类型构造方法必须是私有的，不允许外部创建对象，只能在内部创建对象
    // 枚举类型在创建对象时候，必须处于枚举类的第一行
    // 创建的对象必须外部可以直接访问,且无法修改,因此修饰符必须
    // 是public static final
    // 完整格式一定为: public static final 枚举类 变量名 = new 枚举类(构造方法参数)
    // 在枚举中,所有的固定部分的内容需要省略,枚举会自动添加
    // 所有修饰符会自动加上,且由于只能在内部创建对象,因此该对象一定是当前枚举类,枚举类可以省略
    // 最终格式如下:变量名(构造方法参数)
    // 此时对外使用时,需要几个对象,在枚举中就定义几个对象
    // 如果定义多个对象,则多个对象之间以逗号分割
    // 如果构造方法没有参数,可以省略括号
    SPRING("春天", 2, 5),
    SUMMER("夏天", 6, 9),
    AUTUMN("秋天", 10, 12),
    WINTER("冬天", 1, 2),
    ALL ;



    //季节名字
    private String name;
    //季节开始的月份
    private int startMonth;
    //季节结束的月份
    private int endMonth;

    // 理论上：所有类中可以存在的东西, 在枚举类中都可以有
    // 可以包含属性、方法、构造方法等
    // 但是对于构造方法,必须是私有的,不允许外部访问,只能在内部创建对象
    // 由于只能是私有的,因此枚举类的构造函数默认使用private进行修饰
    // 此时构造方法的修饰符可以省略
    Season() {

    }

    Season(String name, int startMonth, int endMonth) {
        this.name = name;
        this.startMonth = startMonth;
        this.endMonth = endMonth;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getStartMonth() {
        return startMonth;
    }

    public void setStartMonth(int startMonth) {
        this.startMonth = startMonth;
    }

    public int getEndMonth() {
        return endMonth;
    }

    public void setEndMonth(int endMonth) {
        this.endMonth = endMonth;
    }
}
